/**
 * 两个元素递增的链表a,b
 * 求a，b的交集然后放到a中
 * 
 * 采用归并的思想，设置pa,p2两个指针，对两个链表扫描，同时出现在两个集合中的元素才连接到结果表中，且保留一个，
 * 其他节点全部释放，遍历完毕后，释放另一个链表的其他全部节点
 */

#include"LinkedList.h"

LinkedList * unionList(LinkedList* la,LinkedList *lb){
    LinkedListNode*pa=la->next;
    LinkedListNode*pb=lb->next;
    LinkedListNode*u,*pc=la;//pc是合并后的链表（也就是a的头指针，u是临时节点，用来删除某个节点
    while (pa&&pb)
    {
        if(pa->val==pb->val){//如果二者相等，
            pc->next=pa;//先将这个相等的元素连接到c的末尾
            pc=pa;//
            u=pb;//删除pb这个节点
            pa=pa->next;//a，b链表后移一位
            pb=pb->next;
            delete u;
        }else if(pa->val<pb->val){//a表的数据比较小，那么移动a指针，同时删除当前a节点
            u=pa;
            pa=pa->next;
            delete u;
        }else{//b表的数据比较小，移动b的指针，同时删除当前b节点
            u=pb;
            pb=pb->next;
            delete u;
        }
    }
    while (pb)
    {
        u=pb;
        pb=pb->next;
        delete u;
    }
    pc->next=nullptr;
    delete lb;
    return la;
    
    


}